"""
python中没有接口的概念 ，但是有抽象类和抽象接口的概念
抽象类：是一个不能被实例化的类，要通过其实现类实例化
抽象方法：没有被具体实现的方法
    抽象类中可以没有抽象方法 ，但是抽象方法必须在抽象类中

python中不直接支持抽象类，要通过abc模块实现抽象类的定义
如果一个类继承自 abc.ABC类 那那就是一个抽象类

"""
from abc import ABC, abstractmethod


# abcdemo继承了ABC那么那就是一个抽象类
# 如果一个空的抽象类，其实可以理解为具体类，是可以创建对象的
# 但是如果一个方法中有抽象方法（添加了@abstractmethod注解）的时候，
class AbcDemo(ABC):

    @abstractmethod # 这个注解说明是抽象犯法
    def exec(self):
        pass



# 真实的类继承自一个抽象类 ，要实现抽象类的方法
class realDemo(AbcDemo):
    def exec(self):
        print("hello im a instance of AbcDemo !!! ")
        pass

class realDemo2(AbcDemo):
    def exec(self):
        print("hello hello hello hello  !!! ")
        pass

class realDemoWithoutImplAbc(AbcDemo):
        pass


def exec(abcDmeo):
    abcDmeo.exec()

#abc = AbcDemo() # 抽象类，且抽象类中有抽象方法，这个时候就报错无法实例化

# realDemo这个类继承自抽象类，且实现了AbcDemo的抽象方法，所以可以实例化
abc = realDemo()
exec(abc)

abc2 = realDemo2()
exec(abc2)

# realDemoWithoutImplAbc 这个类继承自抽象类，但是没有实现抽象方法，无法实例化
#efg = realDemoWithoutImplAbc()

